#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "Jeu.h"


/* MUTATEURS */

/* Change la carte active sur le personnage et sur le terrain */
void mettre_a_jour_carte(Jeu * jeu)
{
    int resultat;

    switch(jeu->perso->carte)
    {
        case 0 : if(jeu->perso->posy==20)
                    {   resultat = 1;   }
                 break;

        case 1 : if(jeu->perso->posy==3)
                    {   resultat = 0;   }
                 if(jeu->perso->posx==31)
                    {   resultat = 2; }
                 if(jeu->perso->posy==20)
                    {  resultat = 3; }
                 break;

        case 2 : if(jeu->perso->posx==0)
                    {   resultat = 1; }
                 if(jeu->perso->posy==20)
                    {   resultat = 4; }
                 break;

        case 3 : if(jeu->perso->posy==3)
                    {   resultat = 1; }
                if(jeu->perso->posx==31)
                    {   resultat = 4; }
                if(jeu->perso->posy==20)
                    {   resultat = 5; }
                break;

        case 4 : if(jeu->perso->posy==3)
                    {   resultat = 2; }
                 if(jeu->perso->posx==0)
                 {  resultat = 3; }
                 break;

        case 5 : if(jeu->perso->posy==3)
                {   resultat = 3; }
                if(jeu->perso->posx==31)
                {   resultat = 6; }
                break;
        default : break;
    }

    jeu->perso->carte=resultat;

    switch(resultat)
    {
        case 0 : jeu->terrain->collision=jeu->terrain->collision_zone0;
                break;
        case 1 : jeu->terrain->collision=jeu->terrain->collision_zone1;
                break;
        case 2 : jeu->terrain->collision=jeu->terrain->collision_zone2;
                break;
        case 3 : jeu->terrain->collision=jeu->terrain->collision_zone3;
                break;
        case 4 : jeu->terrain->collision=jeu->terrain->collision_zone4;
                break;
        case 5 : jeu->terrain->collision=jeu->terrain->collision_zone5;
                break;
        case 6 : jeu->terrain->collision=jeu->terrain->collision_zone6;
                break;
        case 7 : jeu->terrain->collision=jeu->terrain->collision_zone7;
                break;
        case 8 : jeu->terrain->collision=jeu->terrain->collision_zone8;
                break;
        case 9 : jeu->terrain->collision=jeu->terrain->collision_zone9;
                break;
        case 10 : jeu->terrain->collision=jeu->terrain->collision_zone10;
                break;
        case 11 : jeu->terrain->collision=jeu->terrain->collision_zone11;
                break;
        case 12 : jeu->terrain->collision=jeu->terrain->collision_zone12;
                break;
        default : break;
    }
}


void parler_pnj(Jeu * jeu, int id)
{
    switch(id)
    {
        case 10 : if(jeu->avancee_quete==1)
                    {   jeu->avancee_quete=2;
                        jeu->quete_a_afficher=2; }
                  if(jeu->avancee_quete==3)
                  {
                        jeu->avancee_quete=4;
                        jeu->quete_a_afficher=4;    }
                        break;
        case 11 : if(jeu->avancee_quete==2)
                    {   jeu->avancee_quete=3;
                        jeu->quete_a_afficher=3; }
                        break;
        default : break;
    }
}


void parler_pnj_est_possible(Jeu * jeu)
{
    int id_pnj;

    if(jeu->perso->posx!=0 && jeu->perso->posx!=31 && jeu->perso->posy!=3 && jeu->perso->posy!=20)
    {
        switch(jeu->perso->sens)
        {
            case 0 : id_pnj=jeu->terrain->collision[((32*(jeu->perso->posy-1))+jeu->perso->posx)];
                        break;
            case 1 : id_pnj=jeu->terrain->collision[((32*jeu->perso->posy)+1+jeu->perso->posx)];
                        break;
            case 2 : id_pnj=jeu->terrain->collision[((32*(1+jeu->perso->posy))+jeu->perso->posx)];
                        break;
            case 3 : id_pnj=jeu->terrain->collision[((32*jeu->perso->posy)-1+jeu->perso->posx)];
                        break;
            default : id_pnj=0;
                        break;
        }

        if(id_pnj>=2)
        {
            parler_pnj(jeu,id_pnj);
        }
    }
}


int ramasser_objet(Jeu * jeu)
{
    if(jeu->terrain->objet[(32*jeu->perso->posy)+jeu->perso->posx]!=0)
    {
        jeu->terrain->objet[(32*jeu->perso->posy)+jeu->perso->posx]=0;
        jeu->terrain->collision[(32*jeu->perso->posy)+jeu->perso->posx]=0;
        return 1;
    }

    else
    {
        return 0;
    }
}


void generer_experience_aleatoire(Jeu * jeu)
{
    int alea;
    alea = 1;

    ajouter_experience(jeu->perso,alea);
}


Jeu * initialiser_jeu()
{
    Jeu * jeu=(Jeu*)malloc(sizeof(Jeu));
    jeu->terrain=initialiser_terrain();
    jeu->perso=initialiser_personnage();
    jeu->avancee_quete=0;
    jeu->dialogue_a_afficher=1;
    jeu->quete_a_afficher=0;
    return jeu;
}
